/*
 * teste_open.c (Refer�ncia: plano_teste.doc item 4.1)
 *
 * A função open retorna erro quando um único processo tenta abrir mais de 20 arquivos.
 *
 *  Created on: Oct 26, 2009
 *      Author: giovani
 */

#include <fs.h>
#include <pcb.h>

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

PCB pcb;

int main(){
	int c=0;

	int i = 0;

	for(i=0;i<20;i++){
		pcb.descriptors[i].usado=1;
	}

	int fd = open("/teste.txt", "r");




	if(pcb.descriptors[c].usado == 1){
		printf("Erro ao abrir arquivo, errono:%d\n",errno);
	}

	else{
		printf("###### Retorno #######\n");
	
		printf("retorno: %d \n", fd);
	
		printf("errno: %d \n", errno);
	
		printf("###### Descritor ######\n");
	
		printf("nr descritor: %d \n", fd);
	
		printf("usado: %s \n", pcb.descriptors[fd].usado ? "SIM" : "NAO");
	
		printf("ptr_taa: %u \n", pcb.descriptors[fd].ptr_fentry);
	
		printf("endereco_buffer: %u \n", pcb.descriptors[fd].buffer);
	
		printf("mode: %d \n", pcb.descriptors[fd].mode);
	
		printf("posicao_arquivo: %d \n", pcb.descriptors[fd].fpos);
	
		printf("nr_bloco_buffer: %d \n", pcb.descriptors[fd].buffer_block);
	
		printf("changed: %d \n", pcb.descriptors[fd].buffer_changed);
	
		printf("##### TAA #####\n");
	
		printf("fcount: %d \n", pcb.descriptors[fd].ptr_fentry->fcount);
	
		printf("inode: %d \n", pcb.descriptors[fd].ptr_fentry->inode_num);
	
		printf("##### inode #####\n");
	
		printf("tipo_arquivo: %d \n", pcb.descriptors[fd].ptr_fentry->f_inode.tipo_arquivo);
	
		printf("tamanho: %d \n", pcb.descriptors[fd].ptr_fentry->f_inode.f_size);
	}

	return 0;
}

typedef struct{
  char name[32];   //nome de elemento do diret�rio.
  int f_inode;     //n�mero do i-node do arquivo.
} d_name;

int carrega_bloco_no_buffer(int end_bloco, void* ptr_buffer){

return 0;

}

int alloc_taa_entry(fentry** entry, ftable* table, int inode){

	*entry = (fentry*) malloc(sizeof(fentry));

	//TODO inserir entry na tabela
	memset(*entry, 0, sizeof(fentry));

	return 0;
}

int get_taa_entry(fentry** entry, ftable* table, int inode){
	return -1;
}

int dealloc_taa_entry(fentry* entry, ftable* table){

	//Remove da lista de table o entry
	//TODO

	//Libera mem�ria
	free(entry);

	return 0;
}

